// https://github.com/klover2/wechatpay-node-v3-ts
// https://wechatpay-api.gitbook.io/wechatpay-api-v3/
// https://pay.weixin.qq.com/docs/merchant/apis/jsapi-payment/payment-notice.html

const mongoose = require('mongoose');

const { Schema } = mongoose;
// 退款同步返回的结果
const name = 'WxPayRefundResult';

const schema = new Schema({
  refund_id: String, // 微信支付退款单号
  out_refund_no: String,   // 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
  transaction_id: String, // 原微信支付交易订单号
  out_trade_no: String, // 原支付交易对应的商户订单号
  channel: String,  // 枚举值： ORIGINAL：原路退款 BALANCE：退回到余额  OTHER_BALANCE：原账户异常退到其他余额账户  OTHER_BANKCARD：原银行卡异常退到其他银行卡
  user_received_account: String, // 取当前退款单的退款入账方，有以下几种情况：
  // 1）退回银行卡：{银行名称}{卡类型}{卡尾号}
  // 2）退回支付用户零钱:支付用户零钱
  // 3）退还商户:商户基本账户商户结算银行账户
  // 4）退回支付用户零钱通:支付用户零钱通
  success_time: String, // 退款成功时间，当退款状态为退款成功时有返回。
  create_time: String, // 退款受理时间
  status: String, // 退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往商户平台-交易中心，手动处理此笔退款。
  // 枚举值：
  // SUCCESS：退款成功
  // CLOSED：退款关闭
  // PROCESSING：退款处理中
  // ABNORMAL：退款异常
  // 示例值：SUCCESS
  funds_account: String, // 退款所使用资金对应的资金账户类型
  // 枚举值：
  // UNSETTLED : 未结算资金
  // AVAILABLE : 可用余额
  // UNAVAILABLE : 不可用余额
  // OPERATION : 运营户
  // BASIC : 基本账户（含可用余额和不可用余额）
  // 示例值：UNSETTLED
  amount: {
    total: Number, // 订单总金额，单位为分
    refund: Number, // 退款标价金额，单位为分，可以做部分退款
    from: [],
    payer_total: Number, //  现金支付金额，单位为分，只能为整数
    payer_refund: Number, // 退款给用户的金额，不包含所有优惠券金额
    settlement_refund: Number,  // 去掉非充值代金券退款金额后的退款金额，单位为分，退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额
    settlement_total: Number, // 应结订单金额=订单金额-免充值代金券金额，应结订单金额<=订单金额，单位为分
    discount_refund: Number, // 优惠退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见代金券或立减优惠，单位为分
    currency: String, // 符合ISO 4217标准的三位字母代码，目前只支持人民币：CNY。
    refund_fee: Number, // 手续费退款金额，单位为分。
  },
  promotion_detail: []
}, {
  strict: false,
  optimisticConcurrency: true,
  timestamps: true
});

schema.index({ hotel_id: 1 });

export default mongoose.model(name, schema);
